﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataObjects;
using System.Data.SqlClient;
using DataAccess;
using InfrastructureSqlServer.Helpers;
using System.Configuration;
using System.Data;

namespace DataAccess
{
    public class CaixaDAO
    {
        private List<Caixa> CarregarListaCaixa(SqlDataReader dr)
        {
            List<Caixa> liCaixa = new List<Caixa>();

            while (dr.Read())
            {
                Caixa caixa = new Caixa();
                caixa.CaixaId = int.Parse(dr["caixaID"].ToString());
                caixa.Ativo = int.Parse(dr["ativo"].ToString());
                caixa.Descricao = dr["DESCRICAO"].ToString();
                caixa.FilialId = int.Parse(dr["filialID"].ToString());
                FilialDAO _filialDao = new FilialDAO();
                caixa.Filial = _filialDao.Consultar(caixa.FilialId)[0];
                liCaixa.Add(caixa);
            }

            return liCaixa;
        }

        public void Inserir(Caixa _caixa)
        {
            SqlParameter[] paramsToSP = new SqlParameter[3];

            paramsToSP[0] = new SqlParameter("@ativo",  _caixa.Ativo);
            paramsToSP[1] = new SqlParameter("@descricao", _caixa.Descricao);
            paramsToSP[2] = new SqlParameter("@filialid", _caixa.FilialId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_insert_caixa", paramsToSP);
                
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao inserir caixa, Erro: " + e.Message);
            }

        }

        public void Alterar(Caixa _caixa)
        {
            SqlParameter[] paramsToSP = new SqlParameter[4];

            paramsToSP[0] = new SqlParameter("@ativo", _caixa.Ativo);
            paramsToSP[1] = new SqlParameter("@descricao", _caixa.Descricao);
            paramsToSP[2] = new SqlParameter("@filialid", _caixa.FilialId);
            paramsToSP[3] = new SqlParameter("@caixaid", _caixa.CaixaId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_update_caixa", paramsToSP);                
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao alterar caixa, Erro: " + e.Message);
            }

        }

        public bool Deletar(int _caixaId)
        {
            SqlParameter[] paramsToSP = new SqlParameter[1];

            paramsToSP[0] = new SqlParameter("@caixaid", _caixaId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_delete_caixa", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao deletar caixa, Erro: " + e.Message);
            }

        }

        public List<Caixa> Consultar(int _caixaId)
        {
            string sqlQuery = string.Format("SELECT * FROM CAIXA WHERE CAIXAID = {0}", _caixaId);

            try
            {
                return CarregarListaCaixa( SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));                
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar caixa, Erro: " + e.Message);
            }

        }

        public List<Caixa> Consultar(string _caixa)
        {
            string sqlQuery = string.Format("SELECT * FROM CAIXA WHERE descricao like '%{0}%'", _caixa);

            try
            {
                return CarregarListaCaixa(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar caixa, Erro: " + e.Message);
            }

        }
    }//class
}//namespace
